package cn.lili.modules.grab.factory.goods;

import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.grab.GrabGoodsParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Slf4j
@RequiredArgsConstructor
public class GrabGoodsFactory {

    private final List<GrabGoodsService> goodsServiceList;

    /**
     * 采集商品工厂
     *
     * @param grabParam 参数
     */
    public ResultMessage<Object> generateGoodsFactory(GrabGoodsParam grabParam) {
        GrabGoodsService grabGoodsService = goodsServiceList.stream().filter(service -> service.step().name().equals(grabParam.getCode())).findFirst().get();
        return grabGoodsService.goodsList(grabParam);
    }

    /**
     * 采集商品分类工厂
     *
     * @param grabParam 参数
     */
    public ResultMessage<Object> generateGoodsCateFactory(GrabGoodsParam grabParam) {
        GrabGoodsService grabGoodsService = goodsServiceList.stream().filter(service -> service.step().name().equals(grabParam.getCode())).findFirst().get();
        return grabGoodsService.goodsCate(grabParam);
    }

    /**
     * 采集商品分类工厂
     *
     * @param grabParam 参数
     */
    public ResultMessage<Object> generateDetailFactory(GrabGoodsParam grabParam) {
        GrabGoodsService grabGoodsService = goodsServiceList.stream().filter(service -> service.step().name().equals(grabParam.getCode())).findFirst().get();
        return grabGoodsService.goodsCate(grabParam);
    }

    /**
     * 商品配送方式工厂
     *
     * @param grabParam 参数
     */
    public ResultMessage<Object> generateYfModeFactory(GrabGoodsParam grabParam) {
        GrabGoodsService grabGoodsService = goodsServiceList.stream().filter(service -> service.step().name().equals(grabParam.getCode())).findFirst().get();
        return grabGoodsService.getYfMode(grabParam);
    }

    /**
     * 商品品牌列表工厂
     *
     * @param grabParam 参数
     */
    public ResultMessage<Object> getBrand(GrabGoodsParam grabParam) {
        GrabGoodsService grabGoodsService = goodsServiceList.stream().filter(service -> service.step().name().equals(grabParam.getCode())).findFirst().get();
        return grabGoodsService.getBrand(grabParam);
    }

    /**
     * 商品库存查询工厂
     *
     * @param grabParam 参数
     */
    public ResultMessage<Object> getGoodsStock(GrabGoodsParam grabParam) {
        GrabGoodsService grabGoodsService = goodsServiceList.stream().filter(service -> service.step().name().equals(grabParam.getCode())).findFirst().get();
        return grabGoodsService.getGoodsStock(grabParam);
    }
}
